package com.zyf.project.binaryproto.type;

import org.jetbrains.annotations.NotNull;

/**
 * <h1>键值对操作的数据类型</h1>
 *
 * @author Zhou Yifan
 */
public enum PrimitiveType {

    /**
     * 空；
     */
    NIL(BaseType.NIL),

    /**
     * 布尔型；
     */
    BOOLEAN(BaseType.BOOLEAN),

    /**
     * 8位的整数：
     */
    INT8(BaseType.INT8),

    /**
     * 16位整数；
     */
    INT16(BaseType.INT16),

    /**
     * 32位整数；
     */
    INT32(BaseType.INT32),

    /**
     * 64位整数；
     */
    INT64(BaseType.INT64),

    /**
     * 文本；
     */
    TEXT(BaseType.TEXT),

    /**
     * 二进制数据；
     */
    BYTES(BaseType.BYTES);;
    public final byte CODE;

    PrimitiveType(byte code) {
        this.CODE = code;
    }

    /**
     * 根据code获取对应的类型
     *
     * @param code 类型编码
     * @return 类型编码所对应的类型
     */
    public static @NotNull PrimitiveType valueOf(byte code) {
        for (PrimitiveType type : PrimitiveType.values()) {
            if (type.CODE == code) {
                return type;
            }
        }
        throw new IllegalArgumentException("Code[" + code + "] not supported by Primitive!");
    }
}
